'VCPUs_CPU',
'VCPUs_flags',
'VCPUs_params',
+ 'state',
'start_time']
VM_metrics_attr_rw = []
VM_metrics_methods = []
def VM_metrics_get_start_time(self, _, ref):
return xen_api_success(self._VM_metrics_get(ref).get_start_time())
+ def VM_metrics_get_state(self, _, ref):
+ return xen_api_success(self._VM_metrics_get(ref).get_state())
+
# Xen API: Class VBD
# ----------------------------------------------------------------
else:
return {}
+ def get_state(self):
+ try:
+ domid = self.xend_domain_instance.getDomid()
+ domlist = xc.domain_getinfo(domid, 1)
+ if domlist and domid == domlist[0]['domid']:
+ dominfo = domlist[0]
+
+ states = []
+ def addState(key):
+ if dominfo[key] == 1:
+ states.append(key)
+
+ addState("running")
+ addState("blocked")
+ addState("paused")
+ addState("dying")
+ addState("crashed")
+ addState("shutdown")
+ return ",".join(states)
+ except Exception, err:
+ # ignore missing domain
+ log.trace("domain_getinfo(%d) failed, ignoring: %s", domid, str(err))
+ return ""
+
def get_VCPUs_params(self):
domid = self.xend_domain_instance.getDomid()
if domid is not None:
'VCPUs_flags' : self.get_VCPUs_flags(),
'VCPUs_params' : self.get_VCPUs_params(),
'start_time' : self.get_start_time(),
+ 'state' : self.get_state(),
}
dom_rec = server.xenapi.VM.get_record(dom_ref)
dom_metrics_ref = server.xenapi.VM.get_metrics(dom_ref)
dom_metrics = server.xenapi.VM_metrics.get_record(dom_metrics_ref)
+
+ states = ('running', 'blocked', 'paused', 'shutdown',
+ 'crashed', 'dying')
+ def state_on_off(state):
+ if dom_metrics['state'].find(state) > -1:
+ return state[0]
+ else:
+ return "-"
+ state_str = "".join([state_on_off(state)
+ for state in states])
+
dom_rec.update({'name': dom_rec['name_label'],
'memory_actual': int(dom_metrics['memory_actual'])/1024,
'vcpus': dom_metrics['VCPUs_number'],
- 'state': '-----',
+ 'state': state_str,
'cpu_time': dom_metrics['VCPUs_utilisation'],
'start_time': dom_metrics['start_time']})